package xyz.fivefaith.tool.common.excetion;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import org.apache.commons.lang3.StringUtils;

import java.io.Serial;
import java.text.MessageFormat;

/**
 * 基础异常
 *
 * @author ruoyi
 */
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class BaseException extends RuntimeException {
    @Serial private static final long serialVersionUID = 1L;

    /** 所属模块 */
    private String module;

    /** 模版消息 */
    private String messageTemplate;

    /** 错误码对应的参数 */
    private Object[] args;

    /** 错误消息 */
    private String defaultMessage;

    /**
     * @param module module
     * @param messageTemplate messageTemplate "{0}是{1}"
     * @param args args
     */
    public BaseException(String module, String messageTemplate, Object[] args) {
        this(module, messageTemplate, args, null);
    }

    public BaseException(String module, String defaultMessage) {
        this(module, null, null, defaultMessage);
    }

    public BaseException(String messageTemplate, Object[] args) {
        this(null, messageTemplate, args, null);
    }

    public BaseException(String defaultMessage) {
        this(null, null, null, defaultMessage);
    }

    @Override
    public String getMessage() {
        String message = null;
        if (!StringUtils.isEmpty(messageTemplate)) {
            message = MessageFormat.format(messageTemplate, args);
        }
        if (message == null) {
            message = defaultMessage;
        }
        return StringUtils.isNotBlank(this.module) ? this.module + "--" + message : message;
    }
}
